/**
 *   ДОБАВЛЕНИЕ РАЗРЕШЕНИЯ АДМИНИСТРАЦИИ НА ПРОПУСК УРОКОВ
 *   Copyright © 2024, А.М.Гольдин. Modified BSD License
 */
"use strict";

// Аргументы:
// [
//    "2024-09-02",                      с какого
//    "2024-09-05",                      по какое
//    "2024-09-01 № 123",                дата и номер документа
//    "8А",                              класс
//    ["ivanov", "petrov", "sidorov"],   логины учащихся
//    "pupkin"                           кто дал разрешение
// ]
// Последний аргумент - логин администратора, давшего разрешение
// (с фронтенда не передается, подписывается скриптом index.js)
// Возвращает "success" или "none"
module.exports = async (args) => {
   try {
      if (args.length != 6) return "none";
      let start  = args[0].substr(0, 10).trim(),
          fin    = args[1].substr(0, 10).trim(),
          doc    = args[2].substr(0, 40).trim(),
          clNum  = args[3].substr(0,  3).trim(),
          pupArr = args[4],
          admin  = args[5].substr(0, 30).trim();

      if (!start || !fin || !doc || !clNum || !pupArr.length || !admin)
         return "none";
      let dtPatt = /^\d{4}-\d{2}-\d{2}$/;
      if (!dtPatt.test(start) || !dtPatt.test(fin)) return "none";
      if (start > fin) return "none";
      doc = doc.replace(/[^а-яёА-ЯЁa-zA-Z0-9.:\-\/№ ]/g, '');
      doc = doc.replace(/(\d{4})-(\d{2})-(\d{2})/, "$3.$2.$1");
      
      // Пишем новые документы в базу. Ключи записи:
      // Uclass, pupil, vid (либо логин администратора, либо "par"),
      // start, fin, prim (реквизиты документа)
      // state (new, reject либо accept - это для работы с родителями)
      for (let pup of pupArr) {
         pup = pup.substr(0, 30).trim();
         let pupPatt = /^[a-z0-9]+$/;
         if (!pupPatt.test(pup)) return "none";

         await db.spravki.insert({
            Uclass: clNum, pupil: pup, vid: admin,
            start: start, fin: fin, prim: doc, state: "accept"
         });
      }      
      return "success";
   }
   catch(e) {return "none";}
};
